// cls_spkcam  like cls_motcpp in motion

#ifndef _SPK_CAMERA_H_
#define _SPK_CAMERA_H_

#include "pch.h"

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <algorithm>

#include "msg_queue.h"

extern "C"
{
#include <libavformat/avformat.h>
#include <libavformat/avio.h>

#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>

#include <libavutil/audio_fifo.h>
#include <libavutil/avassert.h>
#include <libavutil/avstring.h>
#include <libavutil/frame.h>
#include <libavutil/opt.h>

#include <libswresample/swresample.h>
#include <libavutil/samplefmt.h>
#include <libavutil/opt.h>
#include <libavutil/mathematics.h>
}

struct device_info;

class cls_spkcam;
class cls_video;
class cls_video_v4l2;
class cls_video_mpp;
class cls_video_osd;
class cls_audio;
class cls_sip_client;
class cls_rtp_send_ps;
class cls_device_scan;
class cls_device_ctrl;

class cls_spkcam
{
public:
    cls_spkcam(/* args */);
    ~cls_spkcam();

    cls_video *video;
    cls_audio *audio;
    cls_sip_client *sip_cli;
    cls_device_scan *device_scan;

    mqd_t video_queue;
    mqd_t audio_queue;

    device_info *cfg_src; // 修改配置用, 但是这目前没有用上, device_ctrl的逻辑目前还是写死的
    device_info *cfg_cur; // 实时运行用

    void init_app();

    // void video_start();
    // void video_stop();
    // void audio_start();
    // void audio_stop();
    // void sip_start();
    // void sip_stop();

private:
    /* data */
};

#endif //  _SPK_CAMERA_H_